//Iterator 和for  ...of 循环
//   什么是iterator接口    :    不同的数据类型的统一的读取的方法
//   iterator的基本用法
//   for。。。of           ：   背后的原理，就是不断调用iterator接口

{
  let arr=['hello','world'];
  let map=arr[Symbol.iterator]();       //调用iterator接口；
  console.log(map.next());
  console.log(map.next());
  console.log(map.next());
}

{//自定义自己数据的 iterator接口； 让数据可以使用for..of..循环
  let obj={
    start:[1,3,2],
    end:[7,9,8],
    [Symbol.iterator](){                     //声明--接口
      let self=this;
      let index=0;                           //索引
      let arr=self.start.concat(self.end);   //合并为一个数组
      let len=arr.length;                    //数组长度
      return {                               //--- 关键   有next（）  有value  有done
        next(){
          if(index<len){
            return {
              value:arr[index++],
              done:false
            }
          }else{
            return {
              value:arr[index++],
              done:true
            }
          }
        }
      }
    }
  }
  for(let key of obj){                //key就是 item的值
    console.log(key);
  }
}

{
  let arr=['hello','world'];
  for(let value of arr){
    console.log('value',value);
  }
}
